package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
)

/**
 for 的条件里不需要括号
 for 的条件可以省略初始条件、结束条件、递增表达式
 */

// 将 int 类型的数转换成 二进制
func int2Bin(num int) string {
	/**
		10进制转2进制规则：
		10 % 2             ===> 0
		10 / 2 % 2         ===> 1
		10 / 2 / 2 % 2     ===> 0
	    10 / 2 /2 / 2 % 2  ===> 1
		10 /2 /2 /2 /2 % 2 ===> 0 (最后一位是0，丢弃)
		即：二进制结果为：    1010  反过来写
	 */
	ret := ""
	for ; num > 0; num /= 2 {
		lowest := num % 2
		// string 类型只可和string类型的数据相加，因此此处需要进行数据类型的转换
		ret = strconv.Itoa(lowest) + ret
	}
	return ret
}

/**
输出文件的内容
 */
func printFile(filename string) {
	file, err := os.Open(filename)
	if err != nil {
		// 如果存在异常，则将异常进行抛出
		panic(err)
	}
	scanner := bufio.NewScanner(file)
	// 类似于 while 循环
	for scanner.Scan() {
		println(scanner.Text())
	}
}

/**
测试 break 和 continue
 */
func testWhile() {
	loop := 0
	for {
		loop += 1
		if loop == 3 {
			continue
		}
		if loop > 5 {
			break
		}
		fmt.Println("loop=", loop)
	}
}

func main() {

	fmt.Println(
		int2Bin(5),
		int2Bin(10),
		int2Bin(30),
		int2Bin(550),
		int2Bin(34546576845),
	)

	printFile("/Users/huan/code/study/golang/go-study/基础/循环语句.go")

	testWhile()
}
